{
  "cells": [
     {"cell_type":"markdown","source":"<h1>A SymPy tutorial</h1>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>This tutorial provides an introduction to using <code>SymPy</code> within <code>Julia</code>. It owes an enormous debt to the tutorial for using SymPy within Python which may be found <a href=\"http://docs.sympy.org/dev/tutorial/index.html\">here</a>. The overall structure and many examples are taken from that work, with adjustments and additions to illustrate the differences due to using <code>SymPy</code> within <code>Julia</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>This tutorial can be read as an <code>IJulia</code> notebook <a href=\"http://nbviewer.ipython.org/github/jverzani/SymPy.jl/blob/master/examples/tutorial.ipynb\">here</a>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>After installing <code>SymPy</code>, which is discussed in the package's <code>README</code> file, we must first load it into <code>Julia</code> with the standard command <code>using</code>:</p>","metadata":{}},
{"outputs":[],"cell_type":"code","source":["using SymPy"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The start up time is a bit lengthy.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h2>Symbols</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>At the core of <code>SymPy</code> is the introduction of symbolic variables that differ quite a bit from <code>Julia</code>'s variables. Symbolic variables do not immediately evaluate to a value, rather the \"symbolicness\" propagates when interacted with. To keep things manageable, SymPy does some simplifications along the way.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Symbolic expressions are primarily of the <code>Sym</code> type and can be constructed in the standard way:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x = Sym(\"x\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This creates a symbolic object <code>x</code>, which can be manipulated through further function calls.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>There is the <code>&#64;syms</code> macro that makes creating multiple variables a bit less typing, as it creates variables in the local scope – no assignment is necessary. Compare these similar ways to create symbolic variables:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(a,b,c)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["@syms a b c\na,b,c = Sym(\"a,b,c\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(For now, <code>&#64;vars</code> is also an alias for <code>&#64;syms</code>.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<h3>Assumptions</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Finally, there is the <code>symbols</code> constructor for producing symbolic objects. With <code>symbols</code> it is possible to pass assumptions onto the variables. A list of possible assumptions is <a href=\"http://docs.sympy.org/dev/modules/core.html#module-sympy.core.assumptions\">here</a>. Some examples are:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\alpha$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["u = symbols(\"u\")\nx = symbols(\"x\", real=true)\ny1, y2 = symbols(\"y1, y2\", positive=true)\nalpha = symbols(\"alpha\", integer=true, positive=true)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As seen, the <code>symbols</code> function can be used to make one or more variables with zero, one or more assumptions. </p>","metadata":{}},
{"cell_type":"markdown","source":"<p>We jump ahead for a second to illustrate, but here we see that <code>solve</code> will respect these assumptions, by failing to find solutions to these equations:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(x^2 + 1)   # ±i are not real"],"metadata":{},"execution_count":null},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(y1 + 1)    # -1 is not positive"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>&#64;syms</code> macro can also have assumptions passed in as follows:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["0-element Array{Dict{SymPy.Sym,SymPy.Sym},1}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["@syms u1 positive=true u2 positive=true\nsolve(u1 + u2)  # empty, though solving u1 - u2 is not."],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As can be seen, there are several ways to create symbolic values. One caveat is that one can't use <code>Sym</code> to create a variable from a function name in Base.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h3>Special constants</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p><code>Julia</code> has its math constants, like <code>pi</code> and <code>e</code>, <code>SymPy</code> as well. A few of these have <code>Julia</code> counterparts provided by <code>SymPy</code>. For example, these three constants are defined (where <code>oo</code> is for infinity):</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(pi,E,oo)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["PI, E, oo"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(The pretty printing of SymPy objects does not work for tuples.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Numeric values themselves can be symbolic. This example shows the difference. The first <code>asin</code> call dispatches to <code>Julia</code>'s <code>asin</code> function, the second to <code>SymPy</code>'s:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}1.5707963267949\\\\\\frac{\\pi}{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["[asin(1), asin(Sym(1))]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Substitution</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy provides a means to substitute values in for the symbolic expressions. The specification requires an expression, a variable in the expression to substitute in for, and a new value. For example, this is one way to make a polynomial in a new variable:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y^{2} + 2 y + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["@syms x y\nex = x^2 + 2x + 1\nsubs(ex, x, y)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Substitution can also be numeric:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["subs(ex, x, 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The output has no free variables, but is still symbolic.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Expressions with more than one variable can have multiple substitutions, where each is expressed as a tuple:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$z + 1 + \\pi$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y,z = symbols(\"x,y,z\")\nex = x + y + z\nsubs(ex, (x,1), (y,pi))      "],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Pairs can be used for substitution with:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$z + 1 + \\pi$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["subs(ex, x=>1, y=>pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>And, perhaps more conveniently, symbolic objects have their <code>call</code> method overloaded to allow substitution:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$z + 1 + \\pi$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex(x=>1, y=>pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>A straight call is also possble, where the order of the variables is determined by <code>free_symbols</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y + 1 + \\pi$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex(1, pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>When using the pipeline operator, <code>|&gt;</code>, is convenient, there is a curried form that allows the expression to be implicit:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y + z + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex |> subs(x, 1)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As <code>subs</code> is very similar in spirit to <code>Julia</code>'s <code>replace</code> function, that alias is provided:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x + z + 3.14159265358979$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex |> replace(y, pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Conversion from symbolic to numeric</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy provides two identical means to convert a symbolic math expression to a number. One is <code>evalf</code>, the other <code>N</code>. Within <code>Julia</code> we decouple this, using <code>N</code> to also convert to a <code>Julian</code> value and <code>evalf</code> to leave the conversion as a symbolic object.  The <code>N</code> function converts symbolic integers, rationals, irrationals, and complex values, while attempting to find an appropriate <code>Julia</code> type for the value.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>To see the difference, we use both on <code>PI</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["3.141592653589793"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["N(PI)  # floating-point value"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Whereas, while this may look the same, it is still symbolic:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$3.14159265358979$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["evalf(PI)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Both <code>N</code> and <code>evalf</code> allow for a precision argument to be passed through the second argument. This is how 30 digits of $\\pi$ can be extracted:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["3.1415926535897932384626433832793"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["N(PI, 30)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Here <code>N</code> produces a <code>BigFloat</code> with a precision to match (basically) the specified number of digits. Whereas</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$3.14159265358979323846264338328$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["evalf(PI, 30)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>leaves the value as a symbolic object with 30 digits of accuracy.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Explicit conversion via <code>convert&#40;T, ex&#41;</code> can also be done, and is necessary at times if <code>N</code> does not give the desired type.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h2>Algebraic expressions</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p><code>SymPy</code> overloads many of <code>Julia</code>'s functions to work with symbolic objects, such as seen above with <code>asin</code>. The usual mathematical operations such as <code>&#43;</code>, <code>*</code>, <code>-</code>, <code>/</code> etc. work through <code>Julia</code>'s promotion mechanism, where numbers are promoted to symbolic objects, others dispatch internally to related <code>SymPy</code> functions.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>In most all  cases, thinking about this distinction between numbers and symbolic numbers is unnecessary, as numeric values passed to <code>SymPy</code> functions are typically promoted to symbolic expressions. This conversion will take math constants to their corresponding <code>SymPy</code> counterpart, rational expressions to rational expressions, and floating point values to floating point values. However there are edge cases. An expression like <code>1//2 * pi * x</code> will differ from the seemingly identical  <code>1//2 * &#40;pi * x&#41;</code>. The former will produce a floating point value from <code>1//2 * pi</code> before being promoted to a symbolic instance. Using the symbolic value <code>PI</code> makes this expression work either way.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Most of <code>Julia</code>'s <a href=\"http://julia.readthedocs.org/en/latest/manual/mathematical-operations/#elementary-functions\">mathematical</a> functions are overloaded to work with symbolic expressions. <code>Julia</code>'s generic definitions are used, as possible. This also introduces some edge cases. For example, <code>x^&#40;-2&#41;</code> will balk due to the negative, integer exponent, but either <code>x^&#40;-2//1&#41;</code> or <code>x^Sym&#40;-2&#41;</code> will work as expected, as the former call first dispatches to a generic defintion, but the latter two expressions do not.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p><code>SymPy</code> makes it very easy to work with polynomial and rational expressions. First we create some variables:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(x,y,z)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["@syms x y z"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>The expand, factor, collect, and simplify functions</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>A typical polynomial expression in a single variable can be written in two common ways, expanded or factored form. Using <code>factor</code> and <code>expand</code> can move between the two.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>For example,</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left(x + 1\\right) \\left(x + 2\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["p = x^2 + 3x + 2\nfactor(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{5} - 15 x^{4} + 85 x^{3} - 225 x^{2} + 274 x - 120$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["expand(prod([(x-i) for i in 1:5]))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>factor</code> function factors over the rational numbers, so something like this with obvious factors is not finished:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{2} - 2$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["factor(x^2 - 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>When expressions involve one or more variables, it can be convenient to be able to manipulate them. For example, if we define <code>q</code> by:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{2} y + x y^{2} + x y + x$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["q = x*y + x*y^2 + x^2*y + x"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Then we can collect the terms by the variable <code>x</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{2} y + x \\left(y^{2} + y + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["collect(q, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>or the variable <code>y</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x y^{2} + x + y \\left(x^{2} + x\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["collect(q, y)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>These are identical expressions, though viewed differently. </p>","metadata":{}},
{"cell_type":"markdown","source":"<p>A more broad-brush approach is to let <code>SymPy</code> simplify the values. In this case, the common value of <code>x</code> is factored out:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x \\left(x y + y^{2} + y + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["simplify(q)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>simplify</code> function attempts to apply the dozens of functions related to simplification that are part of SymPy. It is also possible to apply these functions one at a time, for example <code>trigsimp</code> does trigonometric simplifications.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>The SymPy tutorial illustrates that <code>expand</code> can also result in simplifications through this example:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$-2$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["expand((x + 1)*(x - 2) - (x - 1)*x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>These methods are not restricted to polynomial expressions and will work with other expressions. For example, <code>factor</code> identifies the following as a factorable object in terms of the variable <code>exp&#40;x&#41;</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left(e^{x} + 1\\right) \\left(e^{x} + 2\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["factor(exp(2x) + 3exp(x) + 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Rational expressions: apart, together, cancel</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>When working with rational expressions, SymPy does not do much simplification unless asked. For example this expression is not simplified:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{1}{x} + \\frac{1}{x^{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["r = 1/x + 1/x^2"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>To put the terms of <code>r</code> over a common denominator, the <code>together</code> function is available:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{1}{x^{2}} \\left(x + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["together(r)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>apart</code> function does the reverse, creating a partial fraction decomposition from a ratio of polynomials:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 x - 1}{x^{2} + x + 1} - \\frac{1}{x + 4} + \\frac{3}{x}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["apart( (4x^3 + 21x^2 + 10x + 12) /  (x^4 + 5x^3 + 5x^2 + 4x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Some times SymPy will cancel factors, as here:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\left(x - 3\\right) \\left(x - 2\\right)}{x - 4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["top = (x-1)*(x-2)*(x-3)\nbottom = (x-1)*(x-4)\ntop/bottom"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(This might make math faculty a bit upset, but it is in line with student thinking.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>However, with expanded terms, the common factor of <code>&#40;x-1&#41;</code> is not cancelled:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{x^{3} - 6 x^{2} + 11 x - 6}{x^{2} - 5 x + 4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["r = expand(top) / expand(bottom)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>cancel</code> function instructs SymPy to perform cancellations. It takes rational functions and puts them in a canonical $p/q$ form with no common (rational) factors and leading terms which are integers:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{x^{2} - 5 x + 6}{x - 4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["cancel(r)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Powers</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The SymPy <a href=\"http://docs.sympy.org/dev/tutorial/simplification.html#powers\">tutorial</a> offers a thorough explanation on powers and which get simplified and under what conditions. Basically</p>","metadata":{}},
{"cell_type":"markdown","source":"<ul>\n<li>$x^a x^b = x^{a+b}$\n<p>is always true. However</p>\n</li>\n<li>$x^a y^a=(xy)^a$\n<p>is only true with assumptions, such as $x,y \\geq 0$ and $a$ is real, but not in general. For example, $x=y=-1$ and $a=1/2$ has $x^a \\cdot y^a = i \\cdot i =  -1$, where as $(xy)^a = 1$.</p>\n</li>\n<li>$(x^a)^b = x^{ab}$\n<p>is only true with assumptions. For example $x=-1, a=2$, and $b=1/2$ gives $(x^a)^b = 1^{1/2} = 1$, whereas $x^{ab} = -1^1 = -1$.</p>\n</li>\n</ul>","metadata":{}},
{"cell_type":"markdown","source":"<p>We see that with assumptions, the following expression does simplify to $0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$0$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["@syms x y nonnegative=true a real=true\nsimplify(x^a * y^a - (x*y)^a)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>However, without assumptions this is not the case</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{a} y^{a} - \\left(x y\\right)^{a}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y,a = symbols(\"x,y,a\")\nsimplify(x^a * y^a - (x*y)^a)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>simplify</code> function calls <code>powsimp</code> to simplify powers, as above. The <code>powsimp</code> function has the keyword argument <code>force&#61;true</code> to force simplification even if assumptions are not specified:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$0$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["powsimp(x^a * y^a - (x*y)^a, force=true)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Trigonometric simplification</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>For trigonometric expressions, <code>simplify</code> will use <code>trigsimp</code> to simplify:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\sin^{2}{\\left (\\theta \\right )} + \\cos^{2}{\\left (\\theta \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["theta = symbols(\"theta\", real=true)\np = cos(theta)^2 + sin(theta)^2"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Calling either <code>simplify</code> or <code>trigsimp</code> will apply the Pythagorean identity:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["simplify(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>While often forgotten,  the <code>trigsimp</code> function is, of course,  aware of the double angle formulas:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$0$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["simplify(sin(2theta) - 2sin(theta)*cos(theta))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>expand_trig</code> function will expand such expressions:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$2 \\sin{\\left (\\theta \\right )} \\cos{\\left (\\theta \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["expand_trig(sin(2theta))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Coefficients</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Returning to polynomials, there are a few functions to find various pieces of the polynomials. First we make a general quadratic polynomial:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$a x^{2} + b x + c$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["a,b,c,x = symbols(\"a, b, c, x\") \np = a*x^2 + b*x + c"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>coeff&#40;ex, monom&#41;</code> function will return the corresponding coefficient of the monomial:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$b$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["coeff(p, x^2) # a \ncoeff(p, x)   # b"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The constant can be found through substitution:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$c$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["p(x=>0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Though one could use some trick like this to find all the coefficients:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}a\\\\b\\\\c\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["Sym[[coeff(p, x^i) for i in N(degree(p)):-1:1]; p(x=>0)]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>that is cumbersome, at best. SymPy has a function <code>coeffs</code>, but it is defined for polynomial types, so will fail on <code>p</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["KeyError(\"coeffs\")\n"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["coeffs(p) # fails"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Polynomials are a special class in SymPy and must be constructed. The <code>Poly</code> constructor can be used. As there is more than one free variable in <code>p</code>, we specify the variable <code>x</code> below:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["3-element Array{Any,1}:\n a\n b\n c"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["q = Poly(p, x)\ncoeffs(q)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Polynomial roots: solve, real_roots, polyroots, nroots</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy provides functions to find the roots of a polynomial. In general, a polynomial with real coefficients of degree $n$ will have $n$ roots when multiplicities and complex roots are accounted for. The number of real roots is consequently between $0$ and $n$.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>For a <em>univariate</em> polynomial expression (a single variable), the real roots, when available, are returned by <code>real_roots</code>. For example,</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}- \\sqrt{2}\\\\\\sqrt{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["real_roots(x^2 - 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Unlike <code>factor</code> – which only factors over rational factors – <code>real_roots</code> finds the two irrational roots here. It is well known (the <a href=\"http://en.wikipedia.org/wiki/Abel&#37;E2&#37;80&#37;93Ruffini_theorem\">Abel-Ruffini theorem</a>) that for degree 5 polynomials, or higher, it is not always possible to express the roots in terms of radicals. However, when the roots are rational <code>SymPy</code> can have success:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}-1\\\\0\\\\1\\\\2\\\\3\\\\3\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["p = (x-3)^2*(x-2)*(x-1)*x*(x+1)*(x^2 + x + 1)\nreal_roots(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>In this example, the degree of <code>p</code> is 8, but only the 6 real roots returned, the double root of $3$ is accounted for. The two complex roots of <code>x^2 &#43; x&#43; 1</code> are not considered by this function. The complete set  of distinct roots can be found with <code>solve</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}-1\\\\0\\\\1\\\\2\\\\3\\\\- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\\\- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This finds the complex roots, but does not account for the double root. The <code>roots</code> function of SymPy does.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>This particular function is not exported (as it conflicts with the <code>roots</code> function from the <code>Polynomials</code> package) but we can still access it using <code>p&#91;:roots&#93;&#40;&#41;</code> or its alias <code>polyroots</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<blockquote>\n<p>Indexing with a symbol. When a symbolic expression is indexed by a symbol it returns a function which maps to a corresponding SymPy function. For example, <code>p&#91;:roots&#93;&#40;args...&#41;</code> will call <code>roots&#40;p, args...&#41;</code> within SymPy. For methods of SymPy objects, the same is true, so if <code>roots</code> were a class method, then the call would resolve to <code>p.roots&#40;args...&#41;</code>.</p>\n</blockquote>","metadata":{}},
{"cell_type":"markdown","source":"<p>The output of calling <code>polyroots</code> will be a dictionary whose keys are the roots and values the multiplicity.</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}1 & \\text{=>} &1\\\\- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2} & \\text{=>} &1\\\\3 & \\text{=>} &2\\\\0 & \\text{=>} &1\\\\-1 & \\text{=>} &1\\\\- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2} & \\text{=>} &1\\\\2 & \\text{=>} &1\\\\\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["polyroots(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>When exact answers are not provided, the <code>polyroots</code> call is contentless:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["p = x^5 - x + 1\npolyroots(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Calling <code>solve</code> seems to produce very little as well:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}\\operatorname{CRootOf} {\\left(x^{5} - x + 1, 0\\right)}\\\\\\operatorname{CRootOf} {\\left(x^{5} - x + 1, 1\\right)}\\\\\\operatorname{CRootOf} {\\left(x^{5} - x + 1, 2\\right)}\\\\\\operatorname{CRootOf} {\\left(x^{5} - x + 1, 3\\right)}\\\\\\operatorname{CRootOf} {\\left(x^{5} - x + 1, 4\\right)}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["rts = solve(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>But in fact, <code>rts</code> contains lots of information. We can extract numeric values quite easily with <code>N</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["5-element Array{Number,1}:\n         -1.1673     \n -0.181232-1.08395im \n -0.181232+1.08395im \n  0.764884-0.352472im\n  0.764884+0.352472im"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["[N(r) for r in rts]     # or map(N, rts)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>These are numeric approximations to irrational values. For numeric approximations to polynomial roots, the <code>nroots</code> function is also provided, though with this call the answers are still symbolic:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}-1.16730397826142\\\\-0.181232444469875 - 1.08395410131771 i\\\\-0.181232444469875 + 1.08395410131771 i\\\\0.764884433600585 - 0.352471546031726 i\\\\0.764884433600585 + 0.352471546031726 i\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["nroots(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>The solve function</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>solve</code> function is more general purpose than just finding roots of univariate polynomials. The function tries to solve for when an expression is 0, or a set of expressions are all 0.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>For example, it can be used to solve when $\\cos(x) = \\sin(x)$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}- \\frac{3 \\pi}{4}\\\\\\frac{\\pi}{4}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(cos(x) - sin(x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Though there are infinitely many correct solutions, these are within a certain range.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>The <a href=\"http://docs.sympy.org/latest/modules/solvers/solveset.html\">solveset</a> function appears in version 1.0 of SymPy and is an intended replacement for <code>solve</code>. Here we see it gives all solutions:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left\\{2 n \\pi - \\frac{3 \\pi}{4}\\; |\\; n \\in \\mathbb{Z}\\right\\} \\cup \\left\\{2 n \\pi + \\frac{\\pi}{4}\\; |\\; n \\in \\mathbb{Z}\\right\\}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["u = solveset(cos(x) - sin(x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The output of <code>solveset</code> is a set, rather than a vector or dictionary. To get the values requires some work. For <em>finite sets</em> we collect the elements with <code>elements</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["2-element Array{Any,1}:\n -2\n  2"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["v = solveset(x^2 - 4)\nelements(v)       "],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>elements</code> function does not work for more complicated sets, such as <code>u</code>. For these, the <code>contains</code> method may be useful.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Solving within Sympy has limits. For example, there is no symbolic solution here:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["PyError (:PyObject_Call) <type 'exceptions.NotImplementedError'>\nNotImplementedError('multiple generators [x, cos(x)]\\nNo algorithms are implemented to solve equation -x + cos(x)',)\n  File \"/Users/verzani/.julia/v0.5/Conda/deps/usr/lib/python2.7/site-packages/sympy/solvers/solvers.py\", line 1053, in solve\n    solution = _solve(f[0], *symbols, **flags)\n  File \"/Users/verzani/.julia/v0.5/Conda/deps/usr/lib/python2.7/site-packages/sympy/solvers/solvers.py\", line 1619, in _solve\n    raise NotImplementedError('\\n'.join([msg, not_impl_msg % f]))\n\n"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(cos(x) - x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>For such, a numeric method would be needed, say:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["7.390851332151606416553120876738734040134117589007574649656806357732846548834992e-01"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["nsolve(cos(x) - x, 1)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Though it can't solve everything, the <code>solve</code> function can also solve equations of a more general type. For example, here it is used to derive the quadratic equation:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}\\frac{1}{2 a} \\left(- b + \\sqrt{- 4 a c + b^{2}}\\right)\\\\- \\frac{1}{2 a} \\left(b + \\sqrt{- 4 a c + b^{2}}\\right)\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["a,b,c  = symbols(\"a,b,c\", real=true)\np = a*x^2 + b*x + c\nsolve(p, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The extra argument <code>x</code> is passed to <code>solve</code> so that <code>solve</code> knows which variable to solve for.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>The <code>solveset</code> function is similar:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left\\{- \\frac{b}{2 a} - \\frac{1}{2 a} \\sqrt{- 4 a c + b^{2}}, - \\frac{b}{2 a} + \\frac{1}{2 a} \\sqrt{- 4 a c + b^{2}}\\right\\}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solveset(p, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>If the <code>x</code> value is not given, <code>solveset</code> will complain and  <code>solve</code> tries to find a solution with all the free variables:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["1-element Array{Dict{SymPy.Sym,SymPy.Sym},1}:\n Dict(a=>-(b*x + c)/x^2)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(p)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Systems of equations can be solved as well. We specify them within a vector of expressions, <code>&#91;ex1, ex2, ..., exn&#93;</code> where a found solution is one where all the expressions are 0. For example, to solve this linear system: $2x + 3y = 6, 3x - 4y=12$, we have:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}y & \\text{=>} &- \\frac{6}{17}\\\\x & \\text{=>} &\\frac{60}{17}\\\\\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x, y = symbols(\"x,y\", real=true)\nexs = [2x+3y-6, 3x-4y-12]\nd = solve(exs)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We can \"check our work\" by plugging into each equation. We take advantage of how the <code>subs</code> function allows us to pass in a dictionary:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}0\\\\0\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["map(ex -> subs(ex, d), exs)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>In the previous example, the system had two equations and two unknowns. When that is not the case, one can specify the variables to solve for as a vector. In this example, we find a quadratic polynomial that approximates $\\cos(x)$ near $0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}a & \\text{=>} &\\frac{1}{2 h^{2}} \\left(- 2 \\cos{\\left (h \\right )} + \\cos{\\left (2 h \\right )} + 1\\right)\\\\b & \\text{=>} &\\frac{1}{2 h} \\left(4 \\cos{\\left (h \\right )} - \\cos{\\left (2 h \\right )} - 3\\right)\\\\c & \\text{=>} &1\\\\\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["a,b,c,h = symbols(\"a,b,c,h\", real=true)\np = a*x^2 + b*x + c\nfn = cos\nexs = [fn(0*h)-p(x=>0), fn(h)-p(x => h), fn(2h)-p(x => 2h)]\nd = solve(exs, [a,b,c])"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Again, a dictionary is returned. The polynomial itself can be found by substituting back in for <code>a</code>, <code>b</code>, and <code>c</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1 + \\frac{x}{2 h} \\left(4 \\cos{\\left (h \\right )} - \\cos{\\left (2 h \\right )} - 3\\right) + \\frac{x^{2}}{2 h^{2}} \\left(- 2 \\cos{\\left (h \\right )} + \\cos{\\left (2 h \\right )} + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["quad_approx = subs(p, d)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(Taking the limit as $h$ goes to 0 produces the answer $1 - x^2/2$.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Finally for <code>solve</code>, we show one way to re-express the polynomial $a_2x^2 + a_1x + a_0$ as $b_2(x-c)^2 + b_1(x-c) + b_0$ using <code>solve</code> (and not, say, an expansion theorem.)</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}b_{0} & \\text{=>} &a_{0} + a_{1} c + a_{2} c^{2}\\\\b_{1} & \\text{=>} &a_{1} + 2 a_{2} c\\\\b_{2} & \\text{=>} &a_{2}\\\\\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["n = 3\nx, c = symbols(\"x,c\")\nas = Sym[\"a$i\" for i in 0:(n-1)]\nbs = Sym[\"b$i\" for i in 0:(n-1)]\np = sum([as[i+1]*x^i for i in 0:(n-1)])\nq = sum([bs[i+1]*(x-c)^i for i in 0:(n-1)])\nsolve(p-q, bs)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>Solving using logical operators</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>solve</code> function does not need to just solve <code>ex &#61; 0</code>. There are other means to specify an equation. Ideally, it would be nice to say <code>ex1 &#61;&#61; ex2</code>, but the interpretation of <code>&#61;&#61;</code> is not for this. Rather, <code>SymPy</code> introduces <code>Eq</code> for equality. So this expression</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}1\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(Eq(x, 1))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>gives 1, as expected from solving <code>x &#61;&#61; 1</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>In addition to <code>Eq</code>, there are <code>Lt</code>, <code>Le</code>, <code>Ge</code>, <code>Gt</code>. The Unicode operators are not aliased to these, but there are alternatives <code>\\ll&#91;tab&#93;</code>, <code>\\leqq&#91;tab&#93;</code>, <code>\\Equal&#91;tab&#93;</code>, <code>\\geqq&#91;tab&#93;</code>, <code>\\gg&#91;tab&#93;</code> and <code>\\neg&#91;tab&#93;</code> to negate.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>So, the above could have been written with the following nearly identical expression, though it is entered with <code>\\Equal&#91;tab&#93;</code>. </p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}1\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(x ⩵ 1)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Here is an alternative way of asking a previous question on a pair of linear equations:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{equation*}\\begin{cases}y & \\text{=>} &- \\frac{6}{17}\\\\x & \\text{=>} &\\frac{60}{17}\\\\\\end{cases}\\end{equation*}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x, y = symbols(\"x,y\", real=true)\nexs = [2x+3y ⩵ 6, 3x-4y ⩵ 12]    ## Using \\Equal[tab]\nd = solve(exs)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Plotting</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>Plots</code> package allows many 2-dimensional plots of <code>SymPy</code> objects to be agnostic as to a backend plotting package.  <code>SymPy</code> provides recipes that allow symbolic expressions to be used where functions are part of the <code>Plots</code> interface. [See the help page for <code>sympy_plotting</code>.]</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>In particular, the following methods of <code>plot</code> are defined:</p>","metadata":{}},
{"cell_type":"markdown","source":"<ul>\n<li><p><code>plot&#40;ex::Sym, a, b&#41;</code> will plot the expression of single variable over the interval <code>&#91;a,b&#93;</code></p>\n</li>\n<li><p><code>plot&#33;&#40;ex::Sym, a, b&#41;</code> will add to the current plot a plot of  the expression of single variable over the interval <code>&#91;a,b&#93;</code></p>\n</li>\n<li><p><code>plot&#40;exs::Vector&#123;Sym&#125;, a, b&#41;</code> will plot each expression over <code>&#91;a,b&#93;</code></p>\n</li>\n<li><p><code>plot&#40;ex1, ex2, a, b&#41;</code> will plot a parametric plot of the two expressions over the interval <code>&#91;a,b&#93;</code>.</p>\n</li>\n<li><p><code>contour&#40;xs, ys, ex::Sym&#41;</code> will make a contour plot of the expression of two variables over the grid specifed by the <code>xs</code> and <code>ys</code>.</p>\n</li>\n<li><p><code>surface&#40;xs, ys, ex::Sym&#41;</code> will make a surface plot of the expression of two variables over the grid specifed by the <code>xs</code> and <code>ys</code>.</p>\n</li>\n</ul>","metadata":{}},
{"cell_type":"markdown","source":"<p>For example:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":"Plot(...)","image/png":"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"},"metadata":{"image/png":{"height":480,"width":600}},"execution_count":null}],"cell_type":"code","source":["x = symbols(\"x\")\nusing Plots\n#\nplot(x^2 - 2, -2,2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or a parametric plot:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":"Plot(...)","image/png":"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"},"metadata":{"image/png":{"height":480,"width":600}},"execution_count":null}],"cell_type":"code","source":["plot(sin(2x), cos(3x), 0, 4pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>For plotting with other plotting packages, it is generally faster to first call <code>lambdify</code> on the expression and then generate <code>y</code> values with the resulting <code>Julia</code> function.</p>","metadata":{}},
{"cell_type":"markdown","source":"<hr />","metadata":{}},
{"cell_type":"markdown","source":"<p>In addition, with <code>PyPlot</code> a few other plotting functions from <code>SymPy</code> are available from its interface to <code>MatplotLib</code>:</p>","metadata":{}},
{"cell_type":"markdown","source":"<ul>\n<li><p><code>plot_parametric_surface&#40;ex1::Sym, ex2::Sym, ex3::Sym&#41;, &#40;uvar, a0, b0&#41;, &#40;vvar, a1, b1&#41;&#41;</code> – make a surface plot of the expressions parameterized by the region <code>&#91;a0,b0&#93; x &#91;a1,b1&#93;</code>. The default region is <code>&#91;-5,5&#93;x&#91;-5,5&#93;</code> where the ordering of the variables is given by <code>free_symbols&#40;ex&#41;</code>.</p>\n</li>\n<li><p><code>plot_implicit&#40;predictate, &#40;xvar, a0, b0&#41;, &#40;yvar, a1, b1&#41;&#41;</code> – make</p>\n</li>\n</ul>","metadata":{}},
{"cell_type":"markdown","source":"<p>an implicit equation plot of the expressions over the region <code>&#91;a0,b0&#93; x &#91;a1,b1&#93;</code>. The default region is <code>&#91;-5,5&#93;x&#91;-5,5&#93;</code> where the ordering of the variables is given by <code>free_symbols&#40;ex&#41;</code>.  To create predicates from the variable, the functions <code>Lt</code>, <code>Le</code>, <code>Eq</code>, <code>Ge</code>, and <code>Gt</code> can be used, as with <code>Lt&#40;x*y, 1&#41;</code>. For infix notation, unicode operators can be used: <code>\\ll&lt;tab&gt;</code>, <code>\\leqq&lt;tab&gt;</code>, <code>\\Equal&lt;tab&gt;</code>, <code>\\geqq&lt;tab&gt;</code>, and <code>\\gg&lt;tab&gt;</code>. For example, <code>x*y ≪ 1</code>.  To combine terms, the unicode <code>\\vee&lt;tab&gt;</code> (for \"or\"), <code>\\wedge&lt;tab&gt;</code> (for \"and\") can be used.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h2>Calculus</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p><code>SymPy</code> has many of the basic operations of calculus provided through a relatively small handful of functions.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h3>Limits</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Limits are computed by the <code>limit</code> function which takes an expression, a variable and a value, and optionally a direction specified by either <code>dir&#61;&quot;&#43;&quot;</code> or <code>dir&#61;&quot;-&quot;</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>For example, this shows Gauss was right:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(sin(x)/x, x, 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Alternatively, the second and third arguments can be specified as a pair:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(sin(x)/x, x=>0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Limits at infinity are done by using <code>oo</code> for $\\infty$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$e$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit((1+1/x)^x, x => oo)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This example computes what L'Hopital reportedly paid a Bernoulli for</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{- a^{\\frac{5}{3}} \\root{3}{x} + \\sqrt{2 a^{3} x - x^{4}}}{- \\root{4}{a} \\root{4}{x^{3}} + a}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["a = symbols(\"a\", positive=true)\nex = (sqrt(2a^3*x-x^4) - a*(a^2*x)^(1//3)) / (a - (a*x^3)^(1//4))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Substituting $x=a$ gives an indeterminate form:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\mathrm{NaN}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex(x=>a)         # or subs(ex, x, a)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We can see it is of the form $0/0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(0,0)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["subs(denom(ex), x, a), subs(numer(ex), x, a)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>And we get</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{16 a}{9}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(ex, x => a)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>In a previous example, we defined <code>quad_approx</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1 + \\frac{x}{2 h} \\left(4 \\cos{\\left (h \\right )} - \\cos{\\left (2 h \\right )} - 3\\right) + \\frac{x^{2}}{2 h^{2}} \\left(- 2 \\cos{\\left (h \\right )} + \\cos{\\left (2 h \\right )} + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["quad_approx"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The limit as <code>h</code> goes to $0$ gives <code>1 - x^2/2</code>, as expected:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- \\frac{x^{2}}{2} + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(quad_approx, h => 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Left and right limits</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The limit is defined when both the left and right limits exist and are equal. But left and right limits can exist and not be equal. The <code>sign</code> function is $1$ for positive $x$, $-1$ for negative $x$ and $0$ when $x$ is 0. It should not have a limit at $0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(sign(x), x => 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Oops. Well, the left and right limits are different anyways:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(-1,1)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(sign(x), x => 0, dir=\"-\"), limit(sign(x), x => 0, dir=\"+\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(The <code>limit</code> function finds the <em>right</em> limit by default. To be careful, either plot or check that both the left and right limit exist and are equal.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<h4>Operator interface</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>For univariate functions there is an \"operator\" interface, where we pass a function object as the first argument and the value for <code>c</code> as the second (the variable is implicit, as <code>f</code> has only one).</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["MethodError(*,(5,Symbol(\"##299\")))\n"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = sin(5x)/x\nlimit(f, 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Numeric limits</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>limit</code> function uses the <a href=\"http://docs.sympy.org/latest/modules/series.html#the-gruntz-algorithm\">Gruntz</a> algorithm. It is far more reliable then simple numeric attempts at limits. An example of Gruntz is the right limit at $0$ of the function:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["f (generic function with 1 method)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = 1/x^(log(log(log(log(1/x)))) - 1)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>A numeric attempt might be done along these lines:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["11×2 Array{Float64,2}:\n 1.0e-6   6.14632e-7 \n 1.0e-7   1.42981e-7 \n 1.0e-8   3.43858e-8 \n 1.0e-9   8.52992e-9 \n 1.0e-10  2.17687e-9 \n 1.0e-11  5.70097e-10\n 1.0e-12  1.52866e-10\n 1.0e-13  4.18839e-11\n 1.0e-14  1.17057e-11\n 1.0e-15  3.33197e-12\n 1.0e-16  9.64641e-13"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["hs = [10.0^(-i) for i in 6:16]\nys = [f(h) for h in hs]\n[hs ys]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>With a values appearing to approach $0$. However, in fact these values will ultimately head  off to $\\infty$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\infty$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(f(x), x, 0, dir=\"+\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>Derivatives</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>One <em>could</em> use limits to implement the definition of a derivative:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$e^{x} \\sin{\\left (x \\right )} + e^{x} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x, h = symbols(\"x,h\")\nf(x) = exp(x)*sin(x)\nlimit((f(x+h) - f(x)) / h, h, 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>However, it would be pretty inefficient, as <code>SymPy</code> already does a great job with derivatives. The <code>diff</code> function implements this. The basic syntax is <code>diff&#40;ex, x&#41;</code> to find the first derivative in <code>x</code> of the expression in <code>ex</code>, or its generalization to $k$th derivatives with <code>diff&#40;ex, x, k&#41;</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>The same derivative computed above by a limit could be found with:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$e^{x} \\sin{\\left (x \\right )} + e^{x} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diff(f(x), x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Similarly, we can compute other derivatives:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x^{x} \\left(\\log{\\left (x \\right )} + 1\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diff(x^x, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$2 \\left(2 x^{2} - 1\\right) e^{- x^{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diff(exp(-x^2), x, 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As an alternate to specifying the number of derivatives, multiple variables can be passed to <code>diff</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$4 x \\left(- 2 x^{2} + 3\\right) e^{- x^{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diff(exp(-x^2), x, x, x)     # same as diff(..., x, 3)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This could include variables besides <code>x</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>The output is a simple expression, so <code>diff</code> can be composed with other functions, such as <code>solve</code>. For example, here we find the critical points where the derivative is $0$ of some rational function:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}- \\frac{1}{2}\\\\\\frac{1}{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = (12x^2 - 1) / (x^3)\ndiff(f(x), x) |> solve"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Operator version</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p><code>SymPy</code> provides an \"operator\" version of <code>diff</code> for univariate functions for convenience (<code>diff&#40;f::Function,k&#61;1&#41;&#61;diff&#40;f&#40;x&#41;,x,k&#41;</code>):</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- 2 e^{x} \\sin{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = exp(x)*cos(x)\ndiff(f, 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Partial derivatives</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>diff</code> function makes finding partial derivatives as easy as specifying the variable to differentiate in. This  example computes the mixed partials of an expression in <code>x</code> and <code>y</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}2 \\cos{\\left (y \\right )}&- 2 x \\sin{\\left (y \\right )}\\\\- 2 x \\sin{\\left (y \\right )}&- x^{2} \\cos{\\left (y \\right )}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y = symbols(\"x,y\")\nex = x^2*cos(y)\nSym[diff(ex,v1, v2) for v1 in [x,y], v2 in [x,y]]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The extra <code>Sym</code>, of the form <code>T&#91;&#93;</code>, helps <code>Julia</code> resolve the type of the output.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h4>Unevaluated derivatives</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>Derivative</code> function provides unevaluated derivatives, useful with differential equations and the output for unknown functions. Here is an example:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\partial^{3}}{\\partial x\\partial y^{2}}  e^{x y}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex = Derivative(exp(x*y), x, y, 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(The <code>y,2</code> is a replacement for <code>y,y</code> which makes higher order terms easier to type.) These expressions are evaluated with <code>doit</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$x \\left(x y + 2\\right) e^{x y}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["doit(ex)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Implicit derivatives</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy can be used to find derivatives of implicitly defined functions. For example, the task of finding $dy/dx$ for the equation:</p>","metadata":{}},
{"cell_type":"markdown","source":"\n$$\ny^4 - x^4 -y^2 + 2x^2 = 0\n$$\n","metadata":{}},
{"cell_type":"markdown","source":"<p>As with the mathematical solution, the key is to treat one of the variables as depending on the other. In this case, we think of $y$ locally as a function of $x$. SymPy allows us to create symbolic functions, and we will use one to substitute in for <code>y</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>In SymPy, symbolic functions use the class name  \"Function\", but in <code>SymPy</code> we use <code>SymFunction</code> to avoid a name collision with one of <code>Julia</code>'s primary types. The constructor can be used as <code>SymFunction&#40;:F&#41;</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(,)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["F, G = SymFunction(\"F\"), SymFunction(\"G\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We can call these functions, but we get a function expression:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$F{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["F(x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>SymPy can differentiate symbolically, again with <code>diff</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{d}{d x} F{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diff(F(x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Of for symbolic functions the more natural <code>F&#39;&#40;x&#41;</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>To get back to our problem, we have our expression:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- x^{4} + 2 x^{2} + y^{4} - y^{2}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y = symbols(\"x, y\")\nex = y^4 - x^4 - y^2 + 2x^2"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Now we substitute:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- x^{4} + 2 x^{2} + F^{4}{\\left (x \\right )} - F^{2}{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex1 = ex(y=>F(x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We want to differentiate \"both\" sides. As the right side is just $0$, there isn't anything to do here, but mentally keep track. As for the left we have:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- 4 x^{3} + 4 x + 4 F^{3}{\\left (x \\right )} \\frac{d}{d x} F{\\left (x \\right )} - 2 F{\\left (x \\right )} \\frac{d}{d x} F{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex2 = diff(ex1, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Now we collect terms and solve in terms of $F'(x)$</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 x \\left(x^{2} - 1\\right)}{\\left(2 F^{2}{\\left (x \\right )} - 1\\right) F{\\left (x \\right )}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex3 = solve(ex2, F'(x))[1]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Finally, we substitute back into the solution for $F(x)$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 x \\left(x^{2} - 1\\right)}{y \\left(2 y^{2} - 1\\right)}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex4 = ex3(F(x) => y)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h6>Example: A Norman Window</h6>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>A classic calculus problem is to maximize the area of a <a href=\"http://en.wiktionary.org/wiki/Norman_window\">Norman window</a> (in the shape of a rectangle with a half circle atop) when the perimeter is fixed to be $P \\geq 0$.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Label the rectangle with $w$ and $h$ for width and height and then the half circle has radius $r=w/2$. With this, we can see that the area is $wh+(1/2)\\pi r^2$ and the perimeter is $w + 2h + \\pi r$. This gives:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$2 h + w + \\frac{\\pi w}{2}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["w, h, P = symbols(\"w, h, P\", nonnegative=true)\nr = w/2\nA = w*h + 1//2 * (pi * r^2)\np = w + 2h + pi*r"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(There is a subtlety above, as m <code>1//2*pi*r^2</code> will lose exactness, as the products will be done left to right, and <code>1//2*pi</code> will be converted to an approximate floating point value before multiplying <code>r^2</code>, as such we rewrite the terms. It may be easier to use <code>PI</code> instead of <code>pi</code>.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>We want to solve for <code>h</code> from when <code>p&#61;P</code> (our fixed value) and substitute back into <code>A</code>. We solve <code>P-p&#61;&#61;0</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\pi w^{2}}{8} + w \\left(\\frac{P}{2} - \\frac{\\pi w}{4} - \\frac{w}{2}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["h0 =  solve(P-p, h)[1]\nA1 = A(h => h0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Now we note this is a parabola in <code>w</code>, so any maximum will be an endpoint or the vertex, provided the leading term is negative.  The leading term can be found through:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["2-element Array{Any,1}:\n -1/2 - pi/8\n         P/2"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["coeffs(Poly(A1, w))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or without using the <code>Poly</code> methods, we could do this:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- \\frac{1}{2} - \\frac{\\pi}{8}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["coeff(collect(expand(A1), w), w^2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Either way, the leading coefficient, $-1/2 - \\pi/8$, is negative, so the maximum can only happen at an endpoint or the vertex of the parabola. Now we check that when $w=0$ (the left endpoint) the area is $0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$0$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["A1(w => 0)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The other endpoint is when $h=0$, or</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 P}{2 + \\pi}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["b = solve(subs(P-p, h, 0), w)[1]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We will need to check the area at <code>b</code> and at the vertex.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>To find the vertex, we can use calculus – it will be when the derivative in <code>w</code> is $0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 P}{\\pi + 4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["c = solve(diff(A1, w), w)[1]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The answer will be the larger of <code>A1</code> at <code>b</code> or <code>c</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\pi P^{2}}{2 \\left(\\pi + 4\\right)^{2}} + \\frac{2 P}{\\pi + 4} \\left(- \\frac{\\pi P}{2 \\pi + 8} - \\frac{P}{\\pi + 4} + \\frac{P}{2}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["atb = A1(w => b)\natc = A1(w => c)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>A simple comparison isn't revealing:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- \\frac{\\pi P^{2}}{2 \\left(2 + \\pi\\right)^{2}} + \\frac{\\pi P^{2}}{2 \\left(\\pi + 4\\right)^{2}} - \\frac{2 P}{2 + \\pi} \\left(- \\frac{\\pi P}{4 + 2 \\pi} - \\frac{P}{2 + \\pi} + \\frac{P}{2}\\right) + \\frac{2 P}{\\pi + 4} \\left(- \\frac{\\pi P}{2 \\pi + 8} - \\frac{P}{\\pi + 4} + \\frac{P}{2}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["atc - atb"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>But after simplifying, we can see that this expression is positive if $P$ is:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2 P^{2}}{16 + \\pi^{3} + 20 \\pi + 8 \\pi^{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["simplify(atc - atb)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>With this observation, we conclude the maximum area happens at <code>c</code> with area <code>atc</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h3>Integrals</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Integration is implemented in SymPy through the <code>integrate</code> function. There are two basic calls:  <code>integrate&#40;f&#40;x&#41;, x&#41;</code> will find the indefinite integral ($\\int f(x) dx$) and when endpoints are specified through <code>integrate&#40;f&#40;x&#41;, &#40;x, a, b&#41;&#41;</code> the definite integral will be found ($\\int_a^b f(x) dx$). The special form <code>integrate&#40;ex, x, a, b&#41;</code> can be used for single integrals, but the specification through a tuple is needed for multiple integrals.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Basic integrals are implemented:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{x^{4}}{4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(x^3, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or in more generality:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\begin{cases} \\log{\\left (x \\right )} & \\text{for}\\: n = -1 \\\\\\frac{x^{n + 1}}{n + 1} & \\text{otherwise} \\end{cases}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["n = symbols(\"n\", real=true)\nex = integrate(x^n, x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The output here is a <em>piecewise function</em>, performing a substitution will choose a branch in this case:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{x^{4}}{4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex(n => 3)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Definite integrals are just as easy. Here is Archimedes' answer:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{1}{3}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(x^2, (x, 0, 1))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Tedious problems, such as those needing multiple integration-by-parts steps can be done easily:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- x^{5} \\cos{\\left (x \\right )} + 5 x^{4} \\sin{\\left (x \\right )} + 20 x^{3} \\cos{\\left (x \\right )} - 60 x^{2} \\sin{\\left (x \\right )} - 120 x \\cos{\\left (x \\right )} + 120 \\sin{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(x^5*sin(x), x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The SymPy tutorial says:</p>","metadata":{}},
{"cell_type":"markdown","source":"<blockquote>\n<p>\"<code>integrate</code> uses powerful algorithms that are always improving to compute both definite and indefinite integrals, including heuristic pattern matching type algorithms, a partial implementation of the Risch algorithm, and an algorithm using Meijer G-functions that is useful for computing integrals in terms of special functions, especially definite integrals.\"</p>\n</blockquote>","metadata":{}},
{"cell_type":"markdown","source":"<p>The tutorial gives the following example:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\left(x^{4} + x^{2} e^{x} - x^{2} - 2 x e^{x} - 2 x - e^{x}\\right) e^{x}}{\\left(x - 1\\right)^{2} \\left(x + 1\\right)^{2} \\left(e^{x} + 1\\right)}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = (x^4 + x^2 * exp(x) - x^2 - 2x*exp(x) - 2x - exp(x)) * exp(x) / ( (x-1)^2 * (x+1)^2 * (exp(x) + 1) )\nf(x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>With indefinite integral:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\log{\\left (e^{x} + 1 \\right )} + \\frac{e^{x}}{x^{2} - 1}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(f(x), x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Multiple integrals</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>integrate</code> function uses a tuple, <code>&#40;var, a, b&#41;</code>, to specify the limits of a definite integral. This syntax lends itself readily to multiple integration.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>For example, the following computes the integral of $xy$ over the unit square:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{1}{4}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x, y = symbols(\"x,y\")\nintegrate(x*y, (y, 0, 1), (x, 0, 1))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The innermost terms can depend on outer ones. For example, the following integrates $x^2y$ over the upper half of the unit circle:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{2}{15}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(x^2*y, (y, 0, sqrt(1 - x^2)), (x, -1, 1))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Unevaluated integrals</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>Integral</code> function can stage unevaluated integrals that will be evaluated by calling <code>doit</code>. It is also used when the output is unknown. This example comes from the tutorial:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\int \\sin{\\left (x^{2} \\right )}\\, dx$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integ = Integral(sin(x^2), x)"],"metadata":{},"execution_count":null},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{3 \\sqrt{2} \\sqrt{\\pi} S\\left(\\frac{\\sqrt{2} x}{\\sqrt{\\pi}}\\right)}{8 \\Gamma{\\left(\\frac{7}{4} \\right)}} \\Gamma{\\left(\\frac{3}{4} \\right)}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["doit(integ)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h4>Operator version</h4>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>For convenience, for univariate functions there is a convenience wrapper so that the operator styles – <code>integrate&#40;f&#41;</code> and <code>integrate&#40;f, a, b&#41;</code> – will perform the integrations.</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{e^{x}}{2} \\sin{\\left (x \\right )} + \\frac{e^{x}}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["f(x) = exp(x) * cos(x)\nintegrate(f)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$2$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["integrate(sin, 0, pi)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>Taylor series</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>The <code>series</code> function can compute series expansions around a point to a specified order. For example, the following command finds 4 terms of the series expansion of <code>exp&#40;sin&#40;x&#41;&#41;</code> in <code>x</code> about $c=0$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$1 + x + \\frac{x^{2}}{2} + \\mathcal{O}\\left(x^{4}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["s1 = series(exp(sin(x)), x, 0, 4)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The coefficients are from the Taylor expansion ($a_i=f^{i}(c)/i!$). The <a href=\"http://en.wikipedia.org/wiki/Big_O_notation\">big \"O\"</a> term indicates that any other power is no bigger than a constant times $x^4$.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Consider what happens when we multiply series of different orders:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\cos{\\left (1 \\right )} - x \\sin{\\left (1 \\right )} + x^{2} \\left(- \\frac{1}{2} \\sin{\\left (1 \\right )} - \\frac{1}{2} \\cos{\\left (1 \\right )}\\right) - \\frac{x^{3}}{2} \\cos{\\left (1 \\right )} + x^{4} \\left(- \\frac{1}{4} \\cos{\\left (1 \\right )} + \\frac{5}{24} \\sin{\\left (1 \\right )}\\right) + x^{5} \\left(- \\frac{1}{24} \\cos{\\left (1 \\right )} + \\frac{23}{120} \\sin{\\left (1 \\right )}\\right) + \\mathcal{O}\\left(x^{6}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["s2 = series(cos(exp(x)), x, 0, 6)"],"metadata":{},"execution_count":null},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\cos{\\left (1 \\right )} + \\sqrt{2} x \\cos{\\left (\\frac{\\pi}{4} + 1 \\right )} - \\frac{3 x^{2}}{2} \\sin{\\left (1 \\right )} - \\sqrt{2} x^{3} \\sin{\\left (\\frac{\\pi}{4} + 1 \\right )} + \\mathcal{O}\\left(x^{4}\\right)$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["simplify(s1 * s2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The big \"O\" term is $x^4$, as smaller order terms in <code>s2</code> are covered in this term. The big \"O\" notation is sometimes not desired, in which case the <code>removeO</code> function can be employed:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{x^{2}}{2} + x + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["removeO(s1)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>Sums</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p><code>SymPy</code> can do sums, including some infinite ones. The <code>summation</code> function performs this task. For example, we have</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{n^{3}}{3} + \\frac{n^{2}}{2} + \\frac{n}{6}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["i, n = symbols(\"i, n\")\nsummation(i^2, (i, 1, n))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Like <code>Integrate</code> and <code>Derivative</code>, there is also a <code>Sum</code> function to stage the task until the <code>doit</code> function is called to initiate the sum.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Some famous sums can be computed:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\operatorname{harmonic}{\\left (n,2 \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["sn = Sum(1/i^2, (i, 1, n))\ndoit(sn)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>And from this a limit is available:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{\\pi^{2}}{6}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["limit(doit(sn), n, oo)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This would have also been possible through <code>summation&#40;1/i^2, &#40;i, 1, oo&#41;&#41;</code>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<h3>Vector-valued functions</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Julia makes constructing a vector of symbolic objects easy:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}1\\\\y\\\\3\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y = symbols(\"x,y\")\nv = [1,2,x]\nw = [1,y,3]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The generic definitions of vector operations will work as expected with symbolic objects:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$2 y + 3 \\overline{x} + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["dot(v,w)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Or</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}- x y + 6\\\\x - 3\\\\y - 2\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["cross(v,w)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Finding gradients can be done using a comprehension.</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}2 x y - y^{2}\\\\x^{2} - 2 x y\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex = x^2*y - x*y^2\nSym[diff(ex,var) for var in [x,y]]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The mixed partials is similarly done by passing two variables to differentiate in to <code>diff</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}2 y&2 \\left(x - y\\right)\\\\2 \\left(x - y\\right)&- 2 x\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["Sym[diff(ex, v1, v2) for v1 in [x,y], v2 in [x,y]]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>For this task, SymPy provides the <code>hessian</code> function:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}2 y&2 x - 2 y\\\\2 x - 2 y&- 2 x\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["hessian(ex)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(When there are symbolic parameters, the free variables are specified as a vector, as in <code>hessian&#40;ex, vars&#41;</code>.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<h2>Matrices</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy has a special class to work with matrices, as does <code>Julia</code>. With <code>SymPy</code>, matrices are just <code>Julia</code>n matrices with symbolic entries. The conversion to matrices that SymPy knows about is  handled in the background.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>Constructing matrices then follows <code>Julia</code>'s conventions:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}1&x\\\\x&1\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x,y = symbols(\"x,y\")\nM = [1 x; x 1]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As much as possible, generic <code>Julia</code> functions are utilized:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- x^{2} + 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diagm(ones(Sym, 5))\nM^2\ndet(M)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Occasionally, the SymPy method has more content:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["2-element Array{Any,1}:\n \n⎡-1⎤\n⎢  ⎥\n⎣1 ⎦\n \n⎡1⎤\n⎢ ⎥\n⎣1⎦   "]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["eigvecs(M)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>As compared to SymPy's <code>:egienvects</code> which yields:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["2-element Array{Any,1}:\n (-x + 1,1,Any[\n⎡-1⎤\n⎢  ⎥\n⎣1 ⎦])\n (x + 1,1,Any[\n⎡1⎤\n⎢ ⎥\n⎣1⎦])    "]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["M[:eigenvects]()"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This example from the tutorial shows the <code>nullspace</code> function:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["3-element Array{Any,1}:\n \n⎡-15⎤\n⎢   ⎥\n⎢ 6 ⎥\n⎢   ⎥\n⎢ 1 ⎥\n⎢   ⎥\n⎢ 0 ⎥\n⎢   ⎥\n⎣ 0 ⎦         \n \n⎡0⎤\n⎢ ⎥\n⎢0⎥\n⎢ ⎥\n⎢0⎥\n⎢ ⎥\n⎢1⎥\n⎢ ⎥\n⎣0⎦                           \n \n⎡ 1  ⎤\n⎢    ⎥\n⎢-1/2⎥\n⎢    ⎥\n⎢ 0  ⎥\n⎢    ⎥\n⎢ 0  ⎥\n⎢    ⎥\n⎣ 1  ⎦"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["M = Sym[1 2 3 0 0; 4 10 0 0 1]\nvs = nullspace(M)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>And this shows that they are indeed in the null space of <code>M</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["3-element Array{Array{SymPy.Sym,1},1}:\n \n⎡0⎤\n⎢ ⎥\n⎣0⎦\n \n⎡0⎤\n⎢ ⎥\n⎣0⎦\n \n⎡0⎤\n⎢ ⎥\n⎣0⎦"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["[M*vs[i] for i in 1:3]"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Symbolic expressions can be included in the matrices:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(\n\n⎡-x + 1    0  ⎤\n⎢             ⎥\n⎣  0     x + 1⎦,\n\n\n⎡0  0⎤\n⎢    ⎥\n⎣0  0⎦)"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["M = [1 x; x 1]\nP, D = diagonalize(M)  # M = PDP^-1\nD, M - P*D*inv(P)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h2>Differential equations</h2>","metadata":{"internals":{"slide_type":"subslide","slide_helper":"subslide_end"},"slideshow":{"slide_type":"slide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>SymPy has facilities for solving ordinary differential <a href=\"http://docs.sympy.org/latest/modules/solvers/ode.html\">equations</a>. The key is to create a symbolic function expression using  <code>SymFunction</code>. Again, this may be done through:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["F"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["F = SymFunction(\"F\")"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>With this, we can  construct a  differential equation. Following the SymPy tutorial, we solve $f''(x) - 2f'(x) + f(x) = \\sin(x)$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$F{\\left (x \\right )} - 2 \\frac{d}{d x} F{\\left (x \\right )} + \\frac{d^{2}}{d x^{2}}  F{\\left (x \\right )} = \\sin{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diffeq = Eq(diff(F(x), x, 2) - 2*diff(F(x)) + F(x), sin(x))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>With this, we just need the <code>dsolve</code> function. This is called as <code>dsolve&#40;eq&#41;</code>:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$F{\\left (x \\right )} = \\left(C_{1} + C_{2} x\\right) e^{x} + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex = dsolve(diffeq)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The <code>dsolve</code> function in SymPy has an extensive list of named arguments to control the underlying algorithm. These can be passed through with the appropriate keyword arguments.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>More clearly, the <code>SymFunction</code> objects have the <code>&#39;</code> method defined to find a derivative, so the above could also have been:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$F{\\left (x \\right )} = \\left(C_{1} + C_{2} x\\right) e^{x} + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["diffeq = F''(x) - 2F'(x) + F(x) - sin(x)\ndsolve(diffeq)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This solution has two constants, $C_1$ and $C_2$, that would be found from initial conditions. Say we know $F(0)=0$ and $F'(0)=1$, can we find the constants? To work with the returned expression, it is most convenient to get just the right hand side. The <code>rhs</code> function will return the right-hand side of a relation:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left(C_{1} + C_{2} x\\right) e^{x} + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex1 = rhs(ex)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>(The <a href=\"http://docs.sympy.org/dev/modules/core.html#sympy.core.basic.Basic.args\">args</a> function also can be used to break up the expression into parts.)</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>With this, we can solve for <code>C1</code> through substituting in $0$ for $x$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}- \\frac{1}{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve(ex1(x => 0), Sym(\"C1\"))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We see that $C1=-1/2$, which we substitute in:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left(C_{2} x - \\frac{1}{2}\\right) e^{x} + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex2 = ex1(Sym(\"C1\") => -1//2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We know that $F'(0)=1$ now, so we solve for <code>C2</code> through</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["\\begin{bmatrix}\\frac{3}{2}\\end{bmatrix}"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["solve( subs(diff(ex2, x), x, 0) - 1, Sym(\"C2\") )"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>This gives <code>C2&#61;3/2</code>. Again we substitute in to get our answer:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\left(\\frac{3 x}{2} - \\frac{1}{2}\\right) e^{x} + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex3 = ex2(Sym(\"C2\") => 3//2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h6>Example</h6>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>We do one more example, this one borrowed from <a href=\"http://nbviewer.ipython.org/github/garth-wells/IA-maths-Ipython/blob/master/notebooks/Lecture1.ipynb\">here</a>.</p>","metadata":{}},
{"cell_type":"markdown","source":"<blockquote>\n<p>Find the variation of speed with time of a parachutist subject to a drag force of $k\\cdot v^2$.</p>\n</blockquote>","metadata":{}},
{"cell_type":"markdown","source":"<p>The equation is</p>","metadata":{}},
{"cell_type":"markdown","source":"\n$$\n\\frac{m}{k} \\frac{dv}{dt} = \\alpha^2 - v^2.\n$$\n","metadata":{}},
{"cell_type":"markdown","source":"<p>We proceed through:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$\\frac{m}{k} \\frac{d}{d t} v{\\left (t \\right )} = \\alpha^{2} - v^{2}{\\left (t \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["t, m,k,alpha = symbols(\"t,m,k,alpha\")\nv = SymFunction(\"v\")\nex = Eq( (m/k)*v'(t), alpha^2 - v(t)^2 )"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We can \"classify\" this ODE with the method <code>classify_ode</code>. As this is not exported, we call it using indexing:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":["(\"separable\",\"1st_power_series\",\"lie_group\",\"separable_Integral\")"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["ex[:classify_ode]()"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>It is linear, but not solvable. Proceeding with <code>dsolve</code> gives:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$v{\\left (t \\right )} = - \\frac{\\alpha}{\\tanh{\\left (\\frac{\\alpha k}{m} \\left(C_{1} - t\\right) \\right )}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["dsolve(ex)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h3>Initial Value Problems</h3>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Solving an initial value problem can be a bit tedious with <code>SymPy</code>. The first example shows the steps. This is because the <code>ics</code> argument for <code>dsolve</code> only works for a few types of equations. These do not include, by default, the familiar \"book\" examples, such as $y'(x) = a\\cdot y(x)$.</p>","metadata":{}},
{"cell_type":"markdown","source":"<p>To work around this, <code>SymPy.jl</code> extends the function <code>dsolve</code> to allow a specification of the initial conditions when solving.  The new ingredients are the independent variable (<code>x</code> in the examples) and tuples to specify each condition. The are conditions on the values of <code>u</code>, <code>u&#39;</code>', ....  To illustrate, we follow an example from <a href=\"https://reference.wolfram.com/language/tutorial/DSolveLinearBVPs.html\">Wolfram</a>.</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$- 3 x y{\\left (x \\right )} + \\frac{d}{d x} y{\\left (x \\right )} - 1$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["y = SymFunction(\"y\")\na, x = symbols(\"a,x\")\neqn = y'(x) - 3*x*y(x) - 1"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>We solve the initial value problem with $y(0) = 4$ as follows:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y{\\left (x \\right )} = \\left(\\frac{\\sqrt{6} \\sqrt{\\pi}}{6} \\operatorname{erf}{\\left (\\frac{\\sqrt{6} x}{2} \\right )} + 4\\right) e^{\\frac{3 x^{2}}{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x0, y0 = 0, 4\nout = dsolve(eqn, x, (y, x0, y0))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>Verifying this requires combining some operations:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$0$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["u = rhs(out)\ndiff(u, x) - 3*x*u - 1"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>To solve with a general initial condition is similar:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y{\\left (x \\right )} = \\left(a + \\frac{\\sqrt{6} \\sqrt{\\pi}}{6} \\operatorname{erf}{\\left (\\frac{\\sqrt{6} x}{2} \\right )}\\right) e^{\\frac{3 x^{2}}{2}}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["x0, y0 = 0, a\nout = dsolve(eqn, x, (y, x0, y0))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>To plot this over a range of values for <code>a</code> we have:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":"Plot(...)","image/png":"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"},"metadata":{"image/png":{"height":480,"width":600}},"execution_count":null}],"cell_type":"code","source":["as = -2:0.6:2\nex = rhs(out)\np = plot(ex(a=>as[1]), -1.8, 1.8, ylims=(-4, 4))\nfor i in as[2:end]\n  plot!(p, ex(a=>i), -1.8, 1.8, ylims=(-4, 4))\nend\np  "],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>The comment from the example is \"This plots several integral curves of the equation for different values of $a$. The plot shows that the solutions have an inflection point if the parameter  lies between $-1$ and $1$ , while a global maximum or minimum arises for other values of $a$.\"</p>","metadata":{}},
{"cell_type":"markdown","source":"<h5>Example</h5>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>We continue with another example from the Wolfram documentation, that of solving $y'' + 5y' + 6y=0$ with values prescribed for both $y$ and $y'$ at $x_0=0$.</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$6 y{\\left (x \\right )} + 5 \\frac{d}{d x} y{\\left (x \\right )} + \\frac{d^{2}}{d x^{2}}  y{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["y = SymFunction(\"y\")\nx = symbols(\"x\")\neqn = y''(x) + 5y'(x) + 6y(x)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>To solve with $y(0) = 1$ and $y'(0) = 1$ we have:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y{\\left (x \\right )} = \\left(4 - 3 e^{- x}\\right) e^{- 2 x}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["out = dsolve(eqn, x, (y, 0, 1), (y', 0, 1))"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<p>To make a plot, we only need the right-hand-side of the answer:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/plain":"Plot(...)","image/png":"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xpSWliorK6uht4YxRnl5eSopKTnifiUlJcrPz2/4uqCgQNu2bVM4HG7R8eL4NXaOJam6ulrDhg3T0KFDdffdd8vzvJYeLpoJr+Hg4/UbHH/4wx80ZcqUz9x+rNcxAQuIUVlZWSorK9Pbb7+tF198UUuWLNHvfve7aA8LQCPw+g2Oe+65R8XFxZo5c+Zx/RwBK8bk5uYe8a9Ya61KSkqUl5d3xP3y8vK0efPmhq83bdp0RFUEsauxc5ySkqLOnTtLktq3b69vfetbWrJkSYuPF82D13Cw8foNht/+9rd68skntWDBAqWlpX3m+8d6HROwYkznzp01dOhQPfzww5Kk2bNnKycnR7169TrifhMmTNDKlStVVFQkSbrvvvt05ZVXtvh4cfwaO8c7duxQfX29JKm2tlZPPvmkhgwZ0uLjRfPgNRxsvH7j3+9//3vNmjVLCxcuVGZm5ufe55iv45bZHobjUVRUZM844wzbu3dvO2zYMPvee+9Za6297bbb7F/+8peG+z399NO2b9++tmfPnnbKlCl237590RoyjlNj5nj27Nl2wIABduDAgbZ///72+uuvtzU1NdEcNhppxowZNjs727quazt37mx79uxpreU1HBSNmV9ev/GttLTUSrI9evSwgwYNsoMGDbKnnXaatbbxr2POIgQAAGhiLBECAAA0sf8P57nQp0HsSaAAAAAASUVORK5CYII="},"metadata":{"image/png":{"height":480,"width":600}},"execution_count":null}],"cell_type":"code","source":["plot(rhs(out), -1/3, 2)"],"metadata":{},"execution_count":null},
{"cell_type":"markdown","source":"<h5>Example</h5>","metadata":{"internals":{"slide_type":"subslide"},"slideshow":{"slide_type":"subslide"},"slide_helper":"slide_end"}},
{"cell_type":"markdown","source":"<p>Boundary value problems can be solved for as well through a similar syntax. Continuing with examples from the <a href=\"https://reference.wolfram.com/language/tutorial/DSolveLinearBVPs.html\">Wolfram</a> page, we solve $y''(x) +y(x) = e^x$ over $[0,1]$ with conditions $y(0)=1$, $y(1) = 1/2$:</p>","metadata":{}},
{"outputs":[{"output_type":"execute_result","data":{"text/latex":["$$y{\\left (x \\right )} = \\frac{e^{x}}{2} + \\frac{\\sin{\\left (x \\right )}}{2 \\sin{\\left (1 \\right )}} \\left(- e - \\cos{\\left (1 \\right )} + 1\\right) + \\frac{1}{2} \\cos{\\left (x \\right )}$$"]},"metadata":{},"execution_count":null}],"cell_type":"code","source":["eqn = y''(x) + y(x) - exp(x)\ndsolve(eqn, x, (y, 0, 1), (y, 1, 1//2))"],"metadata":{},"execution_count":null}
    ],
 "metadata": {
  "language_info": {
   "name": "julia",
   "version": "0.4"
  },
 "kernelspec": {
   "display_name": "Julia 0.4.0",
   "language": "julia",
   "name": "julia-0.4"
  }

 },
 "nbformat": 4,
 "nbformat_minor": 0

}
